const { Connection, Keypair, Transaction, sendAndConfirmTransaction, PublicKey } = require('@solana/web3.js');
const { 
  getAssociatedTokenAddress, 
  createAssociatedTokenAccountInstruction, 
  createTransferInstruction,
  getAccount
} = require('@solana/spl-token');
const fs = require('fs');
const path = require('path');

const DEVNET_RPC = 'https://api.devnet.solana.com';
const TOKEN_MINT = '4C5SJj6Gfd86jTS7PgtYmjGjGxrG9GAuLUmQ47vGnQPc';
const YOUR_ADDRESS = 'shTdKtBScJMC4GkKmasiE9iMKrtZnMFUtwVTdSXsKac';

async function setupQuickTrading() {
  console.log('🎯 快速设置交易测试...');
  
  const connection = new Connection(DEVNET_RPC, 'confirmed');
  const tokenMint = new PublicKey(TOKEN_MINT);
  
  // 为了演示，我们将直接使用测试地址作为买家
  // 注意：在实际应用中，您需要提供您自己地址的私钥
  
  // 加载有SOL余额的测试地址作为买家
  let buyerKeypair;
  try {
    const addressesPath = path.join(__dirname, 'test-addresses.json');
    const addresses = JSON.parse(fs.readFileSync(addressesPath, 'utf8'));
    
    const validAddr = addresses.find(a => a.balance && a.balance > 0);
    if (validAddr) {
      buyerKeypair = Keypair.fromSecretKey(new Uint8Array(validAddr.secretKey));
      console.log(`✅ 买家地址: ${buyerKeypair.publicKey.toString()}`);
      console.log(`💰 买家SOL余额: ${validAddr.balance} SOL`);
    } else {
      console.log('❌ 未找到有SOL余额的测试地址');
      return;
    }
  } catch (error) {
    console.log('❌ 加载测试地址失败:', error.message);
    return;
  }
  
  // 生成买家钱包文件
  const buyerWalletData = {
    publicKey: buyerKeypair.publicKey.toString(),
    secretKey: Array.from(buyerKeypair.secretKey)
  };
  
  const buyerWalletPath = path.join(__dirname, '..', '..', 'frontend', 'buyer-wallet.json');
  fs.writeFileSync(buyerWalletPath, JSON.stringify(buyerWalletData, null, 2));
  
  console.log(`🔑 买家钱包已生成: ${buyerWalletPath}`);
  console.log(`📍 买家地址: ${buyerKeypair.publicKey.toString()}`);
  console.log(`💰 买家SOL余额: 2 SOL`);
  console.log(`🪙 买家代币余额: 0 个 (将在交易中获得)`);
  
  // 为了测试，我们假设有一个"卖家"钱包，包含您的地址
  // 注意：这里我们不能创建包含真实私钥的钱包文件
  const mockSellerWalletData = {
    publicKey: YOUR_ADDRESS,
    secretKey: null, // 占位符，实际使用时需要真实私钥
    note: "这是模拟卖家钱包，包含代币的地址。实际使用时需要提供真实私钥。"
  };
  
  const sellerWalletPath = path.join(__dirname, '..', '..', 'frontend', 'seller-wallet.json');
  fs.writeFileSync(sellerWalletPath, JSON.stringify(mockSellerWalletData, null, 2));
  
  console.log(`\\n🔑 模拟卖家钱包已生成: ${sellerWalletPath}`);
  console.log(`📍 卖家地址: ${YOUR_ADDRESS}`);
  console.log(`🪙 卖家代币余额: 1,000,000 个`);
  console.log(`⚠️  注意：卖家钱包文件不包含真实私钥，仅用于测试目的`);
  
  console.log('\\n🚀 现在可以运行模拟交易测试:');
  console.log('cd ../../frontend && node scripts/trade-test.js');
  
  console.log('\\n💡 如需真实交易，需要：');
  console.log('1. 提供您地址的私钥来创建真实的卖家钱包');
  console.log('2. 或者手动从您的地址向买家地址转移一些代币');
  console.log(`3. 买家地址: ${buyerKeypair.publicKey.toString()}`);
}

setupQuickTrading();
